#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;

// 定义链表节点结构（题目隐含的结构体，需提前声明）
struct ListNode {
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};

// 用户需要实现的函数（占位符版本）
    {{CORE_CODE}}

// 辅助函数：从数组构建链表（用于解析输入）
ListNode* buildLinkedList(const vector<int>& nums) {
    ListNode dummy;
    ListNode* cur = &dummy;
    for (int num : nums) {
        cur->next = new ListNode(num);
        cur = cur->next;
    }
    return dummy.next;
}

// 辅助函数：将链表转为数组（用于调试或输出，本题无需显式输出链表内容）
vector<int> linkedListToArray(ListNode* head) {
    vector<int> res;
    while (head) {
        res.push_back(head->val);
        head = head->next;
    }
    return res;
}

int main() {
    // 1. 解析输入（LeetCode 风格的输入，如：[1,2,3,4,5]）
    string numsLine;
    getline(cin, numsLine);
    
    // 2. 处理输入转成链表
    numsLine = numsLine.substr(1, numsLine.size() - 2); // 去掉首尾的 []
    vector<int> nums;
    stringstream ss(numsLine);
    string numStr;
    while (getline(ss, numStr, ',')) {
        if (!numStr.empty()) {
            nums.push_back(stoi(numStr));
        }
    }
    ListNode* head = buildLinkedList(nums);
    
    // 3. 调用用户核心函数：反转链表
    ListNode* reversedHead = reverseList(head);
    
    // 4. 输出结果（按 LeetCode 格式打印反转后的链表值）
    vector<int> result = linkedListToArray(reversedHead);
    cout << "[";
    for (size_t i = 0; i < result.size(); ++i) {
        cout << result[i];
        if (i < result.size() - 1) {
            cout << ", ";
        }
    }
    cout << "]" << endl;
    
    // 5. 释放链表内存（可选，OJ 系统一般不要求，但好习惯）
    ListNode* cur = reversedHead;
    while (cur) {
        ListNode* temp = cur;
        cur = cur->next;
        delete temp;
    }
    
    return 0;
}